#ifndef ENGINE_SCENE_H
#define ENGINE_SCENE_H

#include <string>
#include <memory>

namespace GameEngine {

class SceneManager; // 前向声明

class Scene {
public:
    Scene(const std::string& name) : m_name(name), m_isInitialized(false), m_isActive(false) {}
    virtual ~Scene() = default;

    // 当场景首次创建或加载时调用一次。
    virtual void OnCreate() = 0;

    // 当场景即将被销毁或卸载时调用一次。
    virtual void OnDestroy() = 0;

    // 当场景成为活动场景时调用。
    virtual void OnActivate() = 0;

    // 当场景不再是活动场景时调用。
    virtual void OnDeactivate() = 0;

    // 每帧调用以更新场景逻辑。
    virtual void Update(float deltaTime) = 0;

    // 每帧调用以渲染场景。
    virtual void Render() = 0;

    const std::string& GetName() const { return m_name; }
    bool IsInitialized() const { return m_isInitialized; }
    bool IsActive() const { return m_isActive; }

protected:
    friend class SceneManager; // 允许 SceneManager 管理内部状态，如 m_isInitialized, m_isActive

    std::string m_name;
    bool m_isInitialized;
    bool m_isActive;
    SceneManager* m_sceneManager = nullptr;
};

}

#endif
